home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / igo / src / kiffile.c < prev    next >
C/C++ Source or Header  |  1993-07-08  |  4KB  |  186 lines

  1. #define DEBUG 1
  2. /* 
  3.     TOWNS囲碁棋譜記録プログラム KIFFILE.C
  4.                                           1992/04/06  久保田俊也
  5.  */
  6. /*
  7.     機能
  8.         kiffileの読み込み 
  9.         kiffileの書き込み
  10.         KIF_HEADERの読み込み
  11.         KIF_HEADERの書き込み
  12.         KIF_TEの読み込み(コメント付) 
  13.         KIF_TEの書き込み(コメント付)
  14.         
  15.         記憶域の割当機能まだ未完成
  16.  */
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19. #include <string.h>
  20. #include <winb.h>
  21. #include <te.h>
  22. #include <fntb.h>
  23. #include <gui.h>
  24. #include "ban19.h"
  25. #include "kiffile.h"
  26. #include "igo.h"
  27.  
  28. int te_no = 0;
  29. void *alloc;
  30. TE_ARG *te_p2;
  31.  
  32. KIF_HEADER_VER3 kiffile_header_ver3;
  33. TE_ARG kiffile2[MAX_TE_NUMBER];
  34.  
  35. int kiffile_read(char fname[]);
  36. int kiffile_write(char fname[]);
  37. int kiftitle_read(KIF_TITLE *kiffile_title);
  38. int kiftitle_write(KIF_TITLE kiffile_title);
  39. int kifte_write(TE_ARG kiffile_te); 
  40. char *comment_read(int comment_no);
  41.  
  42. int kiffile_read(char fname[])
  43. {
  44. int i, c;
  45. char comment[256];
  46. FILE *fp;
  47.  
  48.     if((fp=fopen(fname,"rb"))==NULL){
  49.         printf("read open error!\n");
  50.         return -1;
  51.     }
  52.  
  53. #if DEBUG
  54.     printf("kiffile read\n");
  55. #endif
  56.  
  57.     fread(&kiffile_header_ver3, sizeof(KIF_HEADER_VER3), 1, fp);
  58.     
  59.     if(kiffile_header_ver3.file_id[0] == 'K' &&
  60.        kiffile_header_ver3.file_id[1] == 'I' &&
  61.        kiffile_header_ver3.file_id[2] == 'F' &&
  62.        kiffile_header_ver3.file_id[3] == '3' ){
  63.  
  64.         alloc = TL_malloc(kiffile_header_ver3.te_number*sizeof(TE_ARG));
  65.         if(alloc == NULL){
  66.             printf("TL_malloc error!\n");
  67.             return -1;
  68.         }
  69.         
  70.         fread(alloc, sizeof(TE_ARG), kiffile_header_ver3.te_number, fp);
  71.         
  72.         i=0;
  73.         while((c = getc(fp))!=EOF){
  74.             if((comment[i] = (char)c) == '\0'){
  75.                 comment_set(comment);
  76.                 i=0;
  77.             }else{
  78.                 i++;
  79.             }
  80.         }
  81.  
  82.     }
  83.  
  84.     
  85.     if(fclose(fp)==EOF){
  86.         printf("read close error!\n");
  87.         return -1;
  88.     }
  89. }
  90.  
  91. int kiftitle_read(KIF_TITLE *kiftitle)
  92. {
  93.     
  94.     kiftitle->te_number = kiffile_header_ver3.te_number;
  95.     kiftitle->play_start = kiffile_header_ver3.play_start;
  96.     kiftitle->play_end = kiffile_header_ver3.play_end;
  97.     kiftitle->handy = kiffile_header_ver3.handy;
  98.     kiftitle->komi_id = kiffile_header_ver3.komi_id;
  99.     kiftitle->komi_number = kiffile_header_ver3.komi_number;
  100.     kiftitle->hanmoku_id = kiffile_header_ver3.hanmoku_id;
  101.     strcpy(kiftitle->player_black, kiffile_header_ver3.player_black);
  102.     strcpy(kiftitle->player_white, kiffile_header_ver3.player_white);
  103.     strcpy(kiftitle->play_space, kiffile_header_ver3.play_space);
  104.     kiftitle->vicdef_id = kiffile_header_ver3.vicdef_id;
  105.     kiftitle->vicdef_number = kiffile_header_ver3.vicdef_number;
  106.     
  107.     te_no = 0;
  108.     te_p2 = (TE_ARG *)alloc;
  109. }
  110.  
  111. int kifte_read2(TE_ARG *kiffile_te)
  112. {
  113.     *kiffile_te  = *te_p2;
  114.     te_no++;
  115.     te_p2++;
  116.     if(te_no == kiffile_header_ver3.te_number){
  117.  
  118.         TL_free(alloc); 
  119.         return(1);    
  120.  
  121.     }
  122.     return(0);
  123.  
  124. }
  125.  
  126. int kiftitle_write(KIF_TITLE kiftitle)
  127. {
  128.     
  129.     kiffile_header_ver3.ver = kiftitle.ver;
  130.     kiffile_header_ver3.comment_lenth = kiftitle.comment_lenth;
  131.     kiffile_header_ver3.play_start = kiftitle.play_start;
  132.     kiffile_header_ver3.play_end = kiftitle.play_end;
  133.     kiffile_header_ver3.handy = kiftitle.handy;
  134.     kiffile_header_ver3.komi_id= kiftitle.komi_id;
  135.     kiffile_header_ver3.komi_number = kiftitle.komi_number;
  136.     kiffile_header_ver3.hanmoku_id = kiftitle.hanmoku_id;
  137.     strcpy(kiffile_header_ver3.player_black, kiftitle.player_black);
  138.     strcpy(kiffile_header_ver3.player_white, kiftitle.player_white);
  139.     strcpy(kiffile_header_ver3.play_space, kiftitle.play_space);
  140.     kiffile_header_ver3.vicdef_id = kiftitle.vicdef_id;
  141.     kiffile_header_ver3.vicdef_number = kiftitle.vicdef_number;
  142.     
  143.     te_no = 0;
  144. }
  145.  
  146. int kifte_write(TE_ARG kiffile_te2) 
  147. {
  148.     kiffile2[te_no] = kiffile_te2;
  149.     te_no++;
  150. }
  151.  
  152. int kiffile_write( char fname[])
  153. {
  154. FILE *fp;
  155. int c, i, j;
  156. char *comment;
  157.  
  158.     kiffile_header_ver3.file_id[0] = 'K';
  159.     kiffile_header_ver3.file_id[1] = 'I';
  160.     kiffile_header_ver3.file_id[2] = 'F';
  161.     kiffile_header_ver3.file_id[3] = '3';
  162.     kiffile_header_ver3.te_number = te_no;
  163.     
  164.     if((fp=fopen(fname,"wb"))==NULL){
  165.             printf("write open error!\n");
  166.             return -1;
  167.     }
  168.  
  169.     fwrite(&kiffile_header_ver3, sizeof(KIF_HEADER_VER3), 1, fp);
  170.  
  171.     fwrite(&kiffile2[0], sizeof(TE_ARG), te_no, fp);
  172.  
  173.     for(i=1;(comment=comment_read(i))!=NULL;i++){
  174.         j=0;
  175.         do{
  176.             c = (int)comment[j];
  177.             putc(c, fp);
  178.             j++;
  179.         }while((char)c != '\0');
  180.     }
  181.     
  182.     fclose(fp);
  183.  
  184.     return 0;
  185. }
  186.